<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>In-System-Programmierung</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/In-System-Programmierung"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-In-System-Programmierung rootpage-In-System-Programmierung skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">In-System-Programmierung</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p>Die <b>I</b>n-<b>S</b>ystem-<b>P</b>rogrammierung (ISP), auch <a href="Englische_Sprache" title="Englische Sprache">englisch</a> <span lang="en"><b>I</b>n-<b>c</b>ircuit <b>s</b>erial <b>p</b>rogramming</span> (ICSP), ermöglicht das Programmieren einer <a href="Logische_Schaltung" class="mw-redirect" title="Logische Schaltung">logischen Schaltung</a> direkt im Einsatzsystem. Dazu wird meist eine einfache serielle Verbindung genutzt, z. B. <a href="JTAG" class="mw-redirect" title="JTAG">JTAG</a> oder <a href="Serial_Peripheral_Interface" title="Serial Peripheral Interface">SPI</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
Der Vorteil der In-System-Programmierung ist, dass der zu programmierende Baustein sonst aus dem Zielsystem entfernt werden müsste oder vor der Montage ein weiterer Produktionsschritt zur Programmierung eingeführt werden müsste. Hintergrund: Im Zuge der Bauteileminiaturisierung werden zunehmend <a href="Chipgeh%C3%A4use" title="Chipgehäuse">Chipgehäuse</a> verwendet, die nur gelötet, aber nicht (einfach) gesteckt werden können. Sie werden so weniger mechanisch belastet, und der gesamte Programmiervorgang ist schneller und weniger potenziellen Fehlerquellen ausgesetzt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Methoden">Methoden</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Programmierung_mit_seriellen_Schnittstellen">Programmierung mit seriellen Schnittstellen</h3></div>
<p>Zur Programmierung über zusätzliche serielle Schnittstellen wird ein <b>In-System-Programmer</b> (ISP), gelegentlich auch <b>In-Circuit-Programmer</b>, benutzt, der üblicherweise eine kleine Zusatz<a href="Hardware" title="Hardware">hardware</a> darstellt, mit der sich dafür ausgelegte programmierbare Elektronikbausteine im eingebauten Zustand programmieren lassen. <a href="Programmierger%C3%A4t" title="Programmiergerät">Programmieren</a> in diesem Zusammenhang bedeutet, dass <a href="Firmware" title="Firmware">Firmware</a> (ein zuvor erstelltes <a href="Computerprogramm" title="Computerprogramm">Programm</a> und/oder Daten) in den internen, nichtflüchtigen Speicher (z. B. ein internes <a href="EEPROM" class="mw-redirect" title="EEPROM">EEPROM</a> oder <a href="Flash-Speicher" title="Flash-Speicher">Flash-Speicher</a>) eines Elektronikbausteins geschrieben werden. Die eventuell noch nötige Bereitstellung von höherer Programmierspannung erfolgt üblicherweise im Elektronikbaustein selbst.
</p>
<div class="mw-heading mw-heading3"><h3 id="Programmierung_mit_Bootloader"><span id="Bootloader"></span> Programmierung mit Bootloader</h3></div>
<p>Die weit seltenere und aufwändigere Neuprogrammierung über USB ist vergleichbar mit einem <i>(Device) Firmware Upgrade,</i> das vor allem in Produkten der Konsumelektronik möglich ist. Es kommt ohne spezielle Hardware aus, braucht aber einen <i>Bootloader,</i> quasi das Programm zum Programmieren und für die USB-Kommunikation. Vor der ersten In-System-Programmierung mit USB muss er dem Mikrocontroller auf herkömmlichem Weg über ein (In-System-)<a href="Programmierger%C3%A4t" title="Programmiergerät">Programmiergerät</a> zukommen. Er kann aber auch schon im Werk vorprogrammiert werden (<a href="Maskenprogrammierung" title="Maskenprogrammierung">Maskenprogrammierung</a>).<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Anwendung">Anwendung</h2></div>
<p>Typischerweise handelt es sich bei den zu programmierenden Bausteinen um <a href="Mikrocontroller" title="Mikrocontroller">Mikrocontroller</a>, <a href="System_on_a_Chip" class="mw-redirect" title="System on a Chip">System-on-a-Chip-Bausteine</a> (SoC) oder um „einfache“ Speicher, deren Daten programmiert werden. Sie müssen sich z. B. von außen, durch den ISP, in einen Programmiermodus versetzen lassen.
</p><p>Ein In-System-Programmer besitzt üblicherweise eine Steckverbindung, die auf den zu programmierenden, eingebauten Baustein aufgesteckt wird oder an einen extra für diesen Zweck auf der <a href="Leiterplatte" title="Leiterplatte">Leiterplatte</a> vorgesehenen Anschluss angesteckt wird. Der In-System-Programmer bezieht seine Daten üblicherweise von einem PC, mit dem er ebenfalls verbunden ist. Im Normalfall übernimmt eine Software auf dem PC die gesamte Steuerung des Programmierablaufs, so dass der ISP recht einfach und preiswert gehalten werden kann. Er setzt in diesem Fall die Spannungspegel vom PC in für den Baustein geeignete Werte um.
</p><p>Die Steuersoftware auf dem PC ist häufig in eine entsprechende Programmierumgebung zur Softwareerstellung für den spezifischen Baustein integriert. Häufig kann die ISP-Hardware und die PC-Software auch die bereits im Baustein vorhandenen Daten auslesen, z. B. zur Kontrolle eines Programmiervorgangs.
</p>
<div class="mw-heading mw-heading2"><h2 id="Features">Features</h2></div>
<p>Weiterhin lassen sich mit einem ISP, soweit vorhanden, auch spezielle Funktionen des Elektronikbausteins schalten. So zum Beispiel sogenannte <a href="Fuse-Bit" title="Fuse-Bit">Fuse-Bits</a>, die festlegen, ob ein einmal geschriebenes Programm permanent, nicht mehr überschreibbar ist, oder das Programm von außen ausgelesen werden darf.
</p>
<div class="mw-heading mw-heading2"><h2 id="Auswirkung">Auswirkung</h2></div>
<p>In-System-Programmierbarkeit ist eine wichtige Eigenschaft von Systemen, besonders in der Entwicklungsphase und bei der Wartung. Sie spart das ständige Auswechseln, eventuell sogar verbunden mit Auslöten, des zu programmierenden Bausteins. Nicht alle Systeme, die <i>in system</i> programmierbar sind, benötigen dazu einen zusätzlichen In-System-Programmer. Gerade bei Endverbrauchergeräten ist es üblich geworden, dass die <a href="Firmware" title="Firmware">Firmware</a> dieser Geräte ohne Zusatzhardware ‚geflasht‘, das heißt neu eingespielt, werden kann. Das ist allerdings ggf. erst nach der Erstinbetriebnahme möglich, da dazu meist ein Bootloader vorhanden sein muss; siehe dazu den <a href="#Bootloader">entsprechenden Abschnitt</a> weiter oben.
</p><p>Möglich wurde ISP durch die Integration von <a href="Flash-Speicher" title="Flash-Speicher">Flash-Speicher</a> und <a href="Mikrocontroller" title="Mikrocontroller">Mikrocontroller</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiele">Beispiele</h2></div>
<p>Beispiele für ISP-fähige Bausteine:
</p>
<ul><li><a href="CPLD" class="mw-redirect" title="CPLD">CPLD</a> von Lattice</li>
<li><a href="Atmel_AVR" class="mw-redirect" title="Atmel AVR">AVR</a></li>
<li><a href="PICmicro" title="PICmicro">PICmicro</a></li>
<li><a href="TI_MSP430" title="TI MSP430">TI MSP430</a></li>
<li><a href="STM32" class="mw-redirect" title="STM32">STM32</a></li>
<li>LPC-Familie von <a href="NXP_Semiconductors" title="NXP Semiconductors">NXP</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="In-Circuit-Emulator" title="In-Circuit-Emulator">In-Circuit-Emulator</a></li>
<li><a href="Programmierger%C3%A4t" title="Programmiergerät">Programmiergerät</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://focus.ti.com/docs/toolsw/folders/print/msp-fet430pif.html">ISP für MSP430 von TI</a></li>
<li><a rel="nofollow" class="external text" href="http://anagate.de/products/programmers.htm">ISP für beliebige I2C/SPI EEPROMs via Ethernet-Schnittstelle</a></li>
<li><a rel="nofollow" class="external text" href="http://www.mikrocontroller-elektronik.de/isp-programmer-fuer-arduino-bascom-und-atmel-studio/">Aktuelle ISP-Programmer im Vergleich</a></li>
<li><a rel="nofollow" class="external text" href="http://www.mikrocontroller.net/articles/AVR_In_System_Programmer">Überblick über alle gängigen AVR-ISP</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.mikrocontroller.net/articles/ISP">ISP</a> auf mikrocontroller.net</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.mikrocontroller.net/articles/AVR_In_System_Programmer">AVR_In_System_Programmer</a> auf mikrocontroller.net</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://ww1.microchip.com/downloads/en/Appnotes/doc7745.pdf">USB DFU Bootloaders</a> (PDF-Datei; 853 kB) für AVR Microcontroller von Atmel</span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-04-11" href="https://de.wikipedia.org/wiki/?title=In-System-Programmierung&oldid=232685332">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>